CSRF (Cross-Site Request Forgery) এবং XSS (Cross-Site Scripting) হল দুটি গুরুত্বপূর্ণ নিরাপত্তা ঝুঁকি যা ওয়েব অ্যাপ্লিকেশনগুলোর নিরাপত্তা ক্ষতিগ্রস্ত করতে পারে। ExtJS (এবং সাধারণত সমস্ত ওয়েব অ্যাপ্লিকেশন) এর মধ্যে এই ঝুঁকিগুলিকে সঠিকভাবে প্রতিরোধ করা প্রয়োজন।
CSRF হল একটি ধরনের আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর অধিকার ব্যবহার করে একটি অননুমোদিত বা ক্ষতিকারক অনুরোধ পাঠাতে সক্ষম হয়। এই আক্রমণে ব্যবহারকারীর সেশনের তথ্য (যেমন, কুকি) ব্যবহার করা হয়, যা সঠিকভাবে প্রমাণিত (authenticated) থাকে।
CSRF Token ব্যবহার করা: একটি সাধারণ পদ্ধতি হলো প্রতিটি POST অনুরোধের সাথে একটি CSRF token পাঠানো। এই token টির মান সার্ভারের সেশনের সাথে সম্পর্কিত হয় এবং একটি যাচাই প্রক্রিয়া মাধ্যমে সার্ভার নিশ্চিত করে যে অনুরোধটি বৈধ।
CSRF Token ব্যবহারের উদাহরণ: ExtJS তে একটি CSRF token সংযুক্ত করতে, আপনি একটি beforeload
হ্যান্ডলার বা headers
কনফিগারেশন ব্যবহার করতে পারেন যাতে CSRF token প্রতিটি HTTP অনুরোধের সাথে পাঠানো হয়।
উদাহরণ:
Ext.Ajax.on('beforerequest', function(conn, options) {
// CSRF token যোগ করা
options.headers = options.headers || {};
options.headers['X-CSRF-TOKEN'] = Ext.util.Cookies.get('csrf_token');
});
এখানে, X-CSRF-TOKEN
হল এক্সটিজেএস অ্যাপ্লিকেশন থেকে পাঠানো CSRF Token এবং Ext.util.Cookies.get('csrf_token')
এর মাধ্যমে কুকি থেকে টোকেন নেয়া হচ্ছে। সার্ভার এই টোকেন যাচাই করে নিশ্চিত করবে যে এটি একটি বৈধ অনুরোধ।
SameSite Cookie: SameSite কুকি অ্যাট্রিবিউটটি ব্রাউজারকে নির্দেশ দেয় যে কুকিটি শুধুমাত্র একই উৎস থেকে আসা অনুরোধে পাঠানো হবে, যা CSRF আক্রমণ প্রতিরোধে সহায়ক।
উদাহরণ:
Set-Cookie: csrf_token=your_csrf_token_value; SameSite=Strict;
এখানে, SameSite=Strict
কুকির নিরাপত্তা বাড়ায়, যা কুকি শুধুমাত্র বর্তমান সাইট থেকে আসা অনুরোধের জন্য পাঠাবে।
XSS হল এমন একটি আক্রমণ যেখানে আক্রমণকারী ক্ষতিকারক স্ক্রিপ্ট কোড ইনজেক্ট করে, যা ব্যবহারকারীর ব্রাউজারে চলতে পারে এবং তাদের ডেটা চুরি করতে পারে অথবা অ্যাপ্লিকেশনকে দুর্বল করতে পারে।
HTML ইনপুট স্যানিটাইজেশন: XSS আক্রমণ থেকে রক্ষা পাওয়ার জন্য ব্যবহারকারীর ইনপুট স্যানিটাইজ করা অত্যন্ত গুরুত্বপূর্ণ। অর্থাৎ, আপনি যেকোনো ইউজার ইনপুটে (যেমন টেক্সটফিল্ড, ফর্ম ইত্যাদি) HTML বা স্ক্রিপ্ট ট্যাগ গুলি মুছে ফেলতে পারেন।
ExtJS তে, html
প্রপার্টি ব্যবহার করার সময় অবশ্যই ইনপুট স্যানিটাইজ করতে হবে।
উদাহরণ:
var safeHtml = Ext.util.Format.htmlEncode(userInput);
var panel = Ext.create('Ext.panel.Panel', {
html: safeHtml
});
htmlEncode
ব্যবহার করে, ইনপুট থেকে কোনো HTML বা স্ক্রিপ্ট ট্যাগকে এন্ড-ইনকোড করা হবে, যা XSS আক্রমণ প্রতিরোধ করে।
xtype
এবং tpl
সুরক্ষা: xtype
বা tpl
এর মাধ্যমে ডায়নামিক HTML তৈরি করার সময় সরাসরি ডেটা ব্যবহারের আগে তা স্যানিটাইজ করা উচিত। কখনও সরাসরি ইউজার ইনপুট HTML বা DOM-এ না যোগ করার চেষ্টা করুন।
উদাহরণ:
var userInput = '<script>alert("XSS Attack")</script>';
var panel = Ext.create('Ext.panel.Panel', {
title: 'User Input',
html: Ext.util.Format.htmlEncode(userInput) // Properly sanitized
});
htmlEncode
ব্যবহার করার মাধ্যমে, ডেটা ইনপুট হিসাবে আসা যে কোনো স্ক্রিপ্ট কোড নিরাপদ হয়ে যাবে।
Content Security Policy (CSP): Content Security Policy (CSP) হল একটি নিরাপত্তা ফিচার যা ব্রাউজারকে নির্দেশ দেয় কোন ধরনের স্ক্রিপ্ট বা কনটেন্ট ওয়েবপেজে এক্সিকিউট করা যাবে এবং কোনটা না। এটি XSS আক্রমণ প্রতিরোধে সহায়ক।
CSP কনফিগারেশন করা উদাহরণ:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; object-src 'none';">
এখানে, script-src 'self'
নির্দেশ করে শুধুমাত্র বর্তমান সাইটের স্ক্রিপ্ট চালানো যাবে, এবং অন্য কোনো স্ক্রিপ্ট এক্সিকিউট করা যাবে না।
Escaping Dynamic Content: ExtJS এর template
বা store
ব্যবহার করে ডায়নামিক কন্টেন্ট যোগ করার সময়, ডেটা এসকেপ করার মাধ্যমে স্ক্রিপ্ট ইনজেকশন রোধ করতে হবে। ExtJS এর Ext.XTemplate
এবং Ext.data.Store
সরাসরি স্ক্রিপ্ট ইনজেকশন থেকে রক্ষা পেতে অ্যাকশন নিতে সহায়ক।
উদাহরণ:
var template = new Ext.XTemplate(
'<div>{[this.htmlEncode(values.name)]}</div>',
{
htmlEncode: function(value) {
return Ext.util.Format.htmlEncode(value);
}
}
);
এখানে, htmlEncode
ব্যবহার করে ডেটা এসকেপ করা হয়েছে, যাতে এটি স্ক্রিপ্ট কোড হিসেবে ইনজেক্ট না হতে পারে।
ExtJS অ্যাপ্লিকেশনে CSRF এবং XSS আক্রমণ প্রতিরোধ করার জন্য উপরোক্ত নিরাপত্তা ব্যবস্থাগুলি কার্যকরভাবে প্রয়োগ করা উচিত, যাতে অ্যাপ্লিকেশনটি নিরাপদ ও নিরাপত্তা-বান্ধব হয়।
Read more